package com.bawei.a2010douyin.im;

import android.os.Handler;
import android.widget.Toast;

import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMCustomMessageBody;
import com.hyphenate.chat.EMMessage;
import com.hyphenate.exceptions.HyphenateException;

import java.util.Map;

public class IMUtils {
    private IMUtils(){}
    private static IMUtils imUtils;
    public static IMUtils getInstance(){
        if (imUtils == null){
            synchronized (IMUtils.class){
                if(imUtils == null){
                    imUtils = new IMUtils();
                }
            }
        }
        return imUtils;
    }
    private Handler mHandler = new Handler();

    /**
     * 登陆
     * @param username 用户名
     * @param password 密码
     * @param imCallBack 回调接口
     */
    public void login(String username,String password,IMCallBack<String,String> imCallBack){
        new Thread(new Runnable() {
            @Override
            public void run() {
                EMClient.getInstance().logout(true);//登陆前退出登陆
                EMClient.getInstance().login(username, password, new EMCallBack() {
                            // 登录成功回调
                            @Override
                            public void onSuccess() {
                                //切换到主线程
                                mHandler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        //通过接口回调数据
                                        if(imCallBack != null){
                                            imCallBack.onOk("登陆成功");
                                        }
                                    }
                                });
                            }

                            // 登录失败回调，包含错误信息
                            @Override
                            public void onError(final int code, final String error) {
                                //切换到主线程
                                mHandler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        //通过接口回调数据
                                        if(imCallBack != null){
                                            imCallBack.onError("登陆失败"+error);
                                        }
                                    }
                                });

                            }

                            @Override
                            public void onProgress(int i, String s) {

                            }

                        });
            }
        }).start();
    }

    /**
     * 注册额
     * @param username 用户名
     * @param password 密码
     * @param imCallBack 接口回调
     */
    public void register(String username,String password,IMCallBack<String,String> imCallBack){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    EMClient.getInstance().createAccount(username,password);
                    //切换到主线程
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            //通过接口回调数据
                            if(imCallBack != null){
                                imCallBack.onOk("注册额成功");
                            }
                        }
                    });

                } catch (HyphenateException e) {
                    e.printStackTrace();
                    //切换到主线程
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            //通过接口回调数据
                            if(imCallBack != null){
                                imCallBack.onError("注册失败"+e.getMessage());
                            }
                        }
                    });

                }
            }
        }).start();
    }

    /**
     * 发送自定义消息
     * @param event 消息的类型，比如礼物"gift"，普通消息"text"
     * @param params 消息内容 map集合
     * @param roomId 聊天室id
     */
    public void sendMessage(String event, Map<String, String> params,String roomId){
        EMMessage customMessage = EMMessage.createSendMessage(EMMessage.Type.CUSTOM);
// `event` 为需要传递的自定义消息事件，比如礼物消息，可以设置：
        EMCustomMessageBody customBody = new EMCustomMessageBody(event);
// `params` 类型为 `Map<String, String>`。
        customBody.setParams(params);
        customMessage.addBody(customBody);
// `to` 指另一方环信用户 ID（或者群组 ID，聊天室 ID）
        customMessage.setTo(roomId);
// 如果是群聊，设置 `ChatType` 为 `GroupChat`，该参数默认是单聊（`Chat`）。
        customMessage.setChatType(EMMessage.ChatType.ChatRoom);
// 发送消息
        EMClient.getInstance().chatManager().sendMessage(customMessage);

    }


}
